#ifndef __F2_OPEN_ATOM_MAIN_H__
#define __F2_OPEN_ATOM_MAIN_H__

#include <stdio.h>
#include <stdbool.h>
#include "drv_sensors.h"

/*******************************************************************************************************/
unsigned int Start_thread_id;
unsigned int main_thread_id;
unsigned int adc_key_thread_id;
unsigned int iot_thread_id;
unsigned int uodete_thread_id;
unsigned int alarm_thread_id;
/*******************************************************************************************************/

#define ROUTE_SSID "2048"          // WiFi账号
#define ROUTE_PASSWORD "123456789" // WiFi密码

// #define ROUTE_SSID "xnxy913"        // WiFi账号
// #define ROUTE_PASSWORD "xnxy913913" // WiFi密码

#define MSG_QUEUE_LENGTH 16
#define BUFFER_LEN 50

// #define KEY_TASK_PRIO 3
// #define KEY_STK_SIZE 128
// TSK_ENTRY_FUNC KEY_Task_Handler;
// void KEY_task(void *pvParameters);

#define default_Task_Prio 24         // 默认优先级
#define default_Task_Arg 0           // 默认参数
#define default_Task_Stack_Size 2048 // 默认堆栈大小
#define default_Task_Resved 0        // 默认字段

// 启始任务
#define Start_Task_Entry Start_thread                 // 任务入口函数
#define Start_Task_Prio default_Task_Prio             // 任务优先级
#define Start_Task_Arg default_Task_Arg               // 任务参数
#define Start_Task_Stack_Size default_Task_Stack_Size // 任务堆栈大小
#define Start_Task_Name "Start_Task"                  // 任务名
#define Start_Task_Resved default_Task_Resved         // 保留字段

// 启始任务
#define main_Task_Entry main_thread                  // 任务入口函数
#define main_Task_Prio default_Task_Prio             // 任务优先级
#define main_Task_Arg default_Task_Arg               // 任务参数
#define main_Task_Stack_Size default_Task_Stack_Size // 任务堆栈大小
#define main_Task_Name "main_Task"                   // 任务名
#define main_Task_Resved default_Task_Resved         // 保留字段

// 按键任务
#define adc_key_Task_Entry adc_key_thread               // 任务入口函数
#define adc_key_Task_Prio default_Task_Prio             // 任务优先级
#define adc_key_Task_Arg default_Task_Arg               // 任务参数
#define adc_key_Task_Stack_Size default_Task_Stack_Size // 任务堆栈大小
#define adc_key_Task_Name "adc_key_Task"               // 任务名
#define adc_key_Task_Resved default_Task_Resved         // 保留字段

// 网络连接任务
#define iot_Task_Entry iot_thread                        // 任务入口函数
#define iot_Task_Prio default_Task_Prio                  // 任务优先级
#define iot_Task_Arg default_Task_Arg                    // 任务参数
#define iot_Task_Stack_Size default_Task_Stack_Size * 10 // 任务堆栈大小
#define iot_Task_Name "iot_Task"                         // 任务名
#define iot_Task_Resved default_Task_Resved              // 保留字段

// 数据采集任务
#define updete_Task_Entry updete_thread                // 任务入口函数
#define updete_Task_Prio default_Task_Prio             // 任务优先级
#define updete_Task_Arg default_Task_Arg               // 任务参数
#define updete_Task_Stack_Size default_Task_Stack_Size // 任务堆栈大小
#define updete_Task_Name "updete_Task"                 // 任务名
#define updete_Task_Resved default_Task_Resved         // 保留字段

// 事件触发任务
#define alarm_Task_Entry alarm_thread                 // 任务入口函数
#define alarm_Task_Prio default_Task_Prio             // 任务优先级
#define alarm_Task_Arg default_Task_Arg               // 任务参数
#define alarm_Task_Stack_Size default_Task_Stack_Size // 任务堆栈大小
#define alarm_Task_Name "alarm_Task"                  // 任务名
#define alarm_Task_Resved default_Task_Resved         // 保留字段

#define ppm_max 400     // 最大ppm值
#define humidity_max 70 // 最大湿度值

typedef struct data_info
{
    double illumination;    // 光照强度
    double temperature;     // 温度
    double humidity;        // 湿度
    double ppm;             // ppm 浓度
    mpu6050_data_t mpu6050; // 陀螺仪数据
} data_info_t;

void Start_thread(void *args);  // 启动线程
void main_thread(void *args);   // 主线程
void iot_thread(void *args);    // wifi连接线程
void updete_thread(void *args); // 数据采集线程
void alarm_thread(void *args);  // 数据采集线程
#endif